package SwingForms;

import LogicaClasesNew.Fabrica;
import LogicaClasesNew.IcontroladorCategoria;
import LogicaClasesNew.IcontroladorProducto;
import LogicaClasesNew.IcontroladorProveedor;
import LogicaClasesNew.javamail; //ESTO TIENE QUE DESAPARECER
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class frmProducto extends javax.swing.JInternalFrame {

    private IcontroladorProducto ICPROD;

    private IcontroladorProveedor ICPROVE;

    private IcontroladorCategoria ICCATE;
    private DefaultTableModel Productocategoria;

    //Necesario para la imagen
    FileInputStream archivo = null;
    int longitudBytes = 0;

    byte[] foto0 = null;
    byte[] foto1 = null;
    byte[] foto2 = null;
    Image foto = null;
    
    String ruta = null;

    int i = 0;

    public frmProducto() {

        Fabrica fabrica = Fabrica.getInstance();
        this.ICPROD = fabrica.getControladorProducto();
        this.ICPROVE = fabrica.getControladorProveedor();
        this.ICCATE = fabrica.getControladorCategoria();

        initComponents();
        iniciarComboBox();
        iniciarComboBoxCategoria();
        CrearModeloJT_Productocategoria();
        KeyListener escucha = new KeyListener() {

            @Override
            public void keyTyped(final KeyEvent e) {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        JTextField campo = (JTextField) e.getSource();
                        int posicaoCursor = campo.getCaretPosition();
                        campo.setText(campo.getText().toUpperCase());
                        if (posicaoCursor != campo.getCaretPosition()) {
                            campo.setCaretPosition(posicaoCursor);
                        }
                    }
                });
            }

            @Override
            public void keyReleased(KeyEvent e) {
            }

            @Override
            public void keyPressed(KeyEvent e) {
            }
        };  //FIN KeyListener escucha

        JTF_ProductoDescripcion.addKeyListener(escucha);
        JTF_ProductoTitulo.addKeyListener(escucha);
        JTF_ProductoDescripcion.addKeyListener(escucha);
        TA_NuevoProductoEspecifiaciones.addKeyListener(escucha);

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        JL_ProductoTitulo = new javax.swing.JLabel();
        JTF_ProductoTitulo = new javax.swing.JTextField();
        JL_ProductoNumReferencia = new javax.swing.JLabel();
        JTF_ProductoNumReferencia = new javax.swing.JTextField();
        JL_ProductoDescripcion = new javax.swing.JLabel();
        JTF_ProductoDescripcion = new javax.swing.JTextField();
        JL_ProductoPrecio = new javax.swing.JLabel();
        JTF_ProductoPrecio = new javax.swing.JTextField();
        JL_ProductoPesosUruguayos = new javax.swing.JLabel();
        JL_ProductoProveedor = new javax.swing.JLabel();
        JB_ProductoGuardar = new javax.swing.JButton();
        JB_ProductoCancelar = new javax.swing.JButton();
        JB_ProductoSalir = new javax.swing.JButton();
        JL_ProductoEspecifiaciones = new javax.swing.JLabel();
        JCB_NuevoProductoProveedores = new javax.swing.JComboBox();
        JCB_NuevoProductoSelCategoria = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        TA_NuevoProductoEspecifiaciones = new java.awt.TextArea();
        jScrollPane1 = new javax.swing.JScrollPane();
        JT_Productocategoria = new javax.swing.JTable();
        JB_Productocategoria = new javax.swing.JButton();
        JL_ProductoFoto = new javax.swing.JLabel();
        JB_Foto = new javax.swing.JButton();
        JB_ProductoAgregarFoto = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        JT_AddImagen = new javax.swing.JTable();
        JL_Imagen1 = new javax.swing.JLabel();
        JL_Imagen2 = new javax.swing.JLabel();

        setTitle("Nuevo Producto");

        JL_ProductoTitulo.setText("Titulo:");

        JTF_ProductoTitulo.setForeground(new java.awt.Color(0, 102, 102));

        JL_ProductoNumReferencia.setText("N° Referencia:");

        JTF_ProductoNumReferencia.setForeground(new java.awt.Color(0, 102, 102));
        JTF_ProductoNumReferencia.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                JTF_ProductoNumReferenciaKeyTyped(evt);
            }
        });

        JL_ProductoDescripcion.setText("Descripcion:");

        JTF_ProductoDescripcion.setForeground(new java.awt.Color(0, 102, 102));
        JTF_ProductoDescripcion.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                JTF_ProductoDescripcionKeyTyped(evt);
            }
        });

        JL_ProductoPrecio.setText("Precio:");

        JTF_ProductoPrecio.setForeground(new java.awt.Color(0, 102, 102));
        JTF_ProductoPrecio.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                JTF_ProductoPrecioKeyTyped(evt);
            }
        });

        JL_ProductoPesosUruguayos.setForeground(new java.awt.Color(102, 102, 102));
        JL_ProductoPesosUruguayos.setText("(Peso Uruguayo)");

        JL_ProductoProveedor.setText("Proveedor:");

        JB_ProductoGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Guardar.png"))); // NOI18N
        JB_ProductoGuardar.setToolTipText("Guarda el Nuevo Producto");
        JB_ProductoGuardar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                JB_ProductoGuardarMouseClicked(evt);
            }
        });
        JB_ProductoGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_ProductoGuardarActionPerformed(evt);
            }
        });

        JB_ProductoCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Cancelar.png"))); // NOI18N
        JB_ProductoCancelar.setToolTipText("Limpia Todos los campos ingresados");
        JB_ProductoCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_ProductoCancelarActionPerformed(evt);
            }
        });

        JB_ProductoSalir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Cerrar.png"))); // NOI18N
        JB_ProductoSalir.setToolTipText("Cierra la venta Nuevo Producto");
        JB_ProductoSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_ProductoSalirActionPerformed(evt);
            }
        });

        JL_ProductoEspecifiaciones.setText("Especifiacion(es):");

        JCB_NuevoProductoProveedores.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Seleccione un Proveedor" }));
        JCB_NuevoProductoProveedores.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JCB_NuevoProductoProveedoresActionPerformed(evt);
            }
        });

        JCB_NuevoProductoSelCategoria.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Seleccione la Categoria" }));
        JCB_NuevoProductoSelCategoria.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JCB_NuevoProductoSelCategoriaActionPerformed(evt);
            }
        });

        jLabel2.setText("Categoria:");

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CompleteTodCamposAzul.png"))); // NOI18N

        TA_NuevoProductoEspecifiaciones.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                TA_NuevoProductoEspecifiacionesKeyTyped(evt);
            }
        });

        JT_Productocategoria.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        JT_Productocategoria.setEnabled(false);
        jScrollPane1.setViewportView(JT_Productocategoria);

        JB_Productocategoria.setText(">>");
        JB_Productocategoria.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_ProductocategoriaActionPerformed(evt);
            }
        });

        JL_ProductoFoto.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(102, 102, 102), 1, true));

        JB_Foto.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Foto.png"))); // NOI18N
        JB_Foto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_FotoActionPerformed(evt);
            }
        });

        JB_ProductoAgregarFoto.setText("+");
        JB_ProductoAgregarFoto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_ProductoAgregarFotoActionPerformed(evt);
            }
        });

        JT_AddImagen.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Imagen"
            }
        ));
        jScrollPane2.setViewportView(JT_AddImagen);

        JL_Imagen1.setText("Seleccione entre");

        JL_Imagen2.setText("1 o 3 Imagenes:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(35, 35, 35)
                        .addComponent(jLabel1)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(JL_ProductoNumReferencia, javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(JL_ProductoDescripcion, javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(JL_ProductoEspecifiaciones, javax.swing.GroupLayout.Alignment.TRAILING)
                                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(JL_Imagen1)
                                        .addComponent(JL_ProductoProveedor))
                                    .addGap(13, 13, 13)))
                            .addComponent(JL_Imagen2))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(JCB_NuevoProductoProveedores, javax.swing.GroupLayout.PREFERRED_SIZE, 253, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(TA_NuevoProductoEspecifiaciones, javax.swing.GroupLayout.PREFERRED_SIZE, 305, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(JTF_ProductoDescripcion, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(JL_ProductoPrecio)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(JTF_ProductoPrecio, javax.swing.GroupLayout.PREFERRED_SIZE, 134, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(27, 27, 27)
                                        .addComponent(JL_ProductoPesosUruguayos))
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(JL_ProductoTitulo)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(JTF_ProductoTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 165, javax.swing.GroupLayout.PREFERRED_SIZE)))
                                .addGap(11, 11, 11))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(JTF_ProductoNumReferencia, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(20, 20, 20)
                                        .addComponent(JB_Foto)
                                        .addGap(324, 324, 324)
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 171, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addGroup(layout.createSequentialGroup()
                                                .addComponent(JB_ProductoCancelar)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                                .addComponent(JB_ProductoGuardar)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(JB_ProductoSalir))))
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(JL_ProductoFoto, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(18, 18, 18)
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(JB_ProductoAgregarFoto)
                                            .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 287, javax.swing.GroupLayout.PREFERRED_SIZE))))
                                .addGap(0, 42, Short.MAX_VALUE))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(331, 331, 331)
                                .addComponent(jLabel2)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(JCB_NuevoProductoSelCategoria, javax.swing.GroupLayout.PREFERRED_SIZE, 191, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(JB_Productocategoria, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(24, 24, 24)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(JL_ProductoNumReferencia)
                    .addComponent(JTF_ProductoNumReferencia, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(2, 2, 2)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(JL_ProductoTitulo)
                            .addComponent(JTF_ProductoTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(JL_ProductoPrecio)
                            .addComponent(JL_ProductoPesosUruguayos)
                            .addComponent(JTF_ProductoPrecio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel2)
                            .addComponent(JCB_NuevoProductoSelCategoria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(JB_Productocategoria))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(JB_ProductoSalir, javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(JB_ProductoGuardar, javax.swing.GroupLayout.Alignment.TRAILING)))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(0, 0, Short.MAX_VALUE)
                                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(JB_ProductoCancelar))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(8, 8, 8)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(JL_ProductoDescripcion)
                            .addComponent(JTF_ProductoDescripcion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(14, 14, 14)
                                        .addComponent(JL_ProductoEspecifiaciones))
                                    .addGroup(layout.createSequentialGroup()
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(TA_NuevoProductoEspecifiaciones, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE)))
                                .addGap(21, 21, 21)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(JL_ProductoProveedor)
                                    .addComponent(JCB_NuevoProductoProveedores, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(JL_ProductoFoto, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(JB_ProductoAgregarFoto)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(20, 20, 20)
                                        .addComponent(JL_Imagen1)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(JL_Imagen2)))
                                .addGap(0, 63, Short.MAX_VALUE))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(JB_Foto)
                                .addGap(14, 14, 14)))))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    //GUARDAR
    private void JB_ProductoGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_ProductoGuardarActionPerformed

         //VALIDACIONES... 
        /*________campos vacios________*/
        //...Titulo
        if (JTF_ProductoTitulo.getText().isEmpty()) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe digitar un Titulo de Producto");
            JTF_ProductoTitulo.requestFocusInWindow();
            return;
        }
        //..Numero Referencia
        if (JTF_ProductoNumReferencia.getText().isEmpty()) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe digitar un Numero de Referencia");
            JTF_ProductoNumReferencia.requestFocusInWindow();
            return;
        }
        //..Descripcion
        if (JTF_ProductoDescripcion.getText().isEmpty()) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe digitar una Descripcion");
            JTF_ProductoDescripcion.requestFocusInWindow();
            return;
        }
        //..Especificaciones
        if (JTF_ProductoDescripcion.getText().isEmpty()) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe digitar una Descripcion");
            JTF_ProductoDescripcion.requestFocusInWindow();
            return;
        }
        //..Precio
        if (JTF_ProductoPrecio.getText().isEmpty()) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe digitar un Precio");
            JTF_ProductoPrecio.requestFocusInWindow();
            return;
        }
        //..Proveedor
        if (JCB_NuevoProductoProveedores.getSelectedIndex() == 0) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe seleccionar un Proveedor");
            JCB_NuevoProductoProveedores.requestFocusInWindow();
            return;
        }
        //...Categorias....  
        if (JCB_NuevoProductoSelCategoria.getSelectedIndex() == 0) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(null, "Debe seleccionar una Categoria");
            JCB_NuevoProductoSelCategoria.requestFocusInWindow();
            return;
        }

        //...................................................................
        // VALIDO EXISTENCIA DEL PRODUCTO
        //NO EXISTE
        if (ICPROD.findProducto(Integer.parseInt(JTF_ProductoNumReferencia.getText())) == null) {
            try {

                if (foto0 != null) { //Eligio por lo menos una imagen
                ICPROD.createProducto2(Integer.parseInt(JTF_ProductoNumReferencia.getText()), JTF_ProductoTitulo.getText(), JTF_ProductoDescripcion.getText(), TA_NuevoProductoEspecifiaciones.getText().toUpperCase(), Float.parseFloat(JTF_ProductoPrecio.getText()), ICPROVE.findProveedor(JCB_NuevoProductoProveedores.getSelectedItem().toString()), foto0, foto1, foto2);    
                }else{
                //SE CREA EL PRODUCTO NUEVO
                ICPROD.createProducto(Integer.parseInt(JTF_ProductoNumReferencia.getText()), JTF_ProductoTitulo.getText(), JTF_ProductoDescripcion.getText(), TA_NuevoProductoEspecifiaciones.getText().toUpperCase(), Float.parseFloat(JTF_ProductoPrecio.getText()), ICPROVE.findProveedor(JCB_NuevoProductoProveedores.getSelectedItem().toString()));
                }
                
                //AL PROVEEDOR AGREGARLE EL PRODUCTO
                ICPROVE.addProductoProveedor(Integer.parseInt(JTF_ProductoNumReferencia.getText()), JCB_NuevoProductoProveedores.getSelectedItem().toString());

                //A LAS  CATEGORIAS AÑADIR EL PRODUCTO CORRESPONDIENTE
                for (int i = 0; i < Productocategoria.getRowCount(); i++) {
                    //Añadir el producto a la categoria 
                    ICCATE.addProductoCategoria(Productocategoria.getValueAt(i, 0).toString(), Integer.parseInt(JTF_ProductoNumReferencia.getText()));
                    //lo persisto
                    ICCATE.editCategoria(Productocategoria.getValueAt(i, 0).toString());
                    ICPROD.asignarCate(Integer.parseInt(JTF_ProductoNumReferencia.getText()), Productocategoria.getValueAt(i, 0).toString());
                }

                JOptionPane.showMessageDialog(this, "El Producto " + JTF_ProductoTitulo.getText() + " ha sido ingresado exitosamente.", "Exito!", JOptionPane.INFORMATION_MESSAGE);

            } catch (Exception p) {
                getToolkit().beep();
                JOptionPane.showMessageDialog(this, "Error.. vuelva a ingresar los datos\n" + p);
            }
            this.setVisible(false);
        } else {
            getToolkit().beep();
            JOptionPane.showMessageDialog(this, "Error ya existe un producto con ese número de referencia");
        }
    }//GEN-LAST:event_JB_ProductoGuardarActionPerformed

    //CANCELAR
    private void JB_ProductoCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_ProductoCancelarActionPerformed

        //LIMPIA TODOS LOS CAMPOS
        JTF_ProductoTitulo.setText("");
        JTF_ProductoNumReferencia.setText("");
        JTF_ProductoDescripcion.setText("");
        TA_NuevoProductoEspecifiaciones.setText("");
        JTF_ProductoPrecio.setText("");

        JCB_NuevoProductoProveedores.setSelectedIndex(0);
        JCB_NuevoProductoSelCategoria.setSelectedIndex(0);

        JTF_ProductoTitulo.requestFocusInWindow();

    }//GEN-LAST:event_JB_ProductoCancelarActionPerformed

    //CERRAR
    private void JB_ProductoSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_ProductoSalirActionPerformed

        //SALE
        this.setVisible(false);
    }//GEN-LAST:event_JB_ProductoSalirActionPerformed

    private void JB_ProductoGuardarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_JB_ProductoGuardarMouseClicked
        // TODO add your handling code here:
    }//GEN-LAST:event_JB_ProductoGuardarMouseClicked


    private void JCB_NuevoProductoProveedoresActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JCB_NuevoProductoProveedoresActionPerformed

    }//GEN-LAST:event_JCB_NuevoProductoProveedoresActionPerformed

    //Carga la categoria elejida
    private void JCB_NuevoProductoSelCategoriaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JCB_NuevoProductoSelCategoriaActionPerformed
        /*
         CategoriaJpaController jpaCateg = new CategoriaJpaController();
         List<Categoria> ListaCategoria;
         ListaCategoria = jpaCateg.findCategoriaEntities();
            
         String nickname = JCB_NuevoProductoSelCategoria.getName(); //carga el dato
       
         Categoria categoria = new Categoria();
         */
    }//GEN-LAST:event_JCB_NuevoProductoSelCategoriaActionPerformed


    private void JTF_ProductoDescripcionKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_JTF_ProductoDescripcionKeyTyped

    }//GEN-LAST:event_JTF_ProductoDescripcionKeyTyped

//EVENTO Numero Referencia (Solo números)
    private void JTF_ProductoNumReferenciaKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_JTF_ProductoNumReferenciaKeyTyped
        //evt es el evento provocado
        char c = evt.getKeyChar();
        //Convertimos a char la tecla que se haya pulsado
        if (!Character.isDigit(c)) {
            //Se pregunta si es digito
            getToolkit().beep();
            //piiiippp...!!
            evt.consume();
            //lo frena..
        }
    }//GEN-LAST:event_JTF_ProductoNumReferenciaKeyTyped

//EVENTO Precio (Solo números)
    private void JTF_ProductoPrecioKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_JTF_ProductoPrecioKeyTyped
        // TODO add your handling code here:
        //evt es el evento provocado
        char c = evt.getKeyChar();
        //Convertimos a char la tecla que se haya pulsado
        if (!Character.isDigit(c)) {
            //Se pregunta si es digito
            if (c != '.') {
                getToolkit().beep();
                //piiiippp...!!
                evt.consume();
                //lo frena..
            }
        }
    }//GEN-LAST:event_JTF_ProductoPrecioKeyTyped


    private void TA_NuevoProductoEspecifiacionesKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_TA_NuevoProductoEspecifiacionesKeyTyped
        // TODO add your handling code here:

    }//GEN-LAST:event_TA_NuevoProductoEspecifiacionesKeyTyped

    private void JB_ProductocategoriaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_ProductocategoriaActionPerformed
        //CARGO categorias al producto
        if (JCB_NuevoProductoSelCategoria.getSelectedIndex() == 0) {
            //Seleccione la categoria que desea agregar
        } else {
            //Agregar esta cate JCB_NuevoProductoSelCategoria.getSelectedItem().toString()
            Productocategoria.addRow(new Object[]{JCB_NuevoProductoSelCategoria.getSelectedItem().toString()});
        }


    }//GEN-LAST:event_JB_ProductocategoriaActionPerformed

    // F O T O
    private void JB_FotoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_FotoActionPerformed

        // CARGA la foto desde la computadora
        JL_ProductoFoto.setIcon(null);

        JFileChooser j = new JFileChooser();
        j.setFileSelectionMode(JFileChooser.FILES_ONLY);//solo archivos y no carpetas

        int estado = j.showOpenDialog(null); //Abre la ventana de busqueda centrada

        if (estado == JFileChooser.APPROVE_OPTION) { //Si es el tipo de archivo q quiero...

            try {
                archivo = new FileInputStream(j.getSelectedFile());
                //necesitamos saber la cantidad de bytes
                this.longitudBytes = (int) j.getSelectedFile().length();

                try {

                    //Guarda al imagen tipo Image llamada icono, ajustada al tamaño del Label
                    foto = ImageIO.read(j.getSelectedFile()).getScaledInstance(JL_ProductoFoto.getWidth(), JL_ProductoFoto.getHeight(), Image.SCALE_DEFAULT);
                    //Carga la imagen en el Label
                    JL_ProductoFoto.setIcon(new ImageIcon(foto));

                    JL_ProductoFoto.updateUI(); //Resetea las propiedades UI con los valores catuales de la vista

                    //SI ME INTERESA SABER LA RUTA... <<<------------------------<-<--<---------------<--<-----------
                    File file = j.getSelectedFile();
                     ruta = String.valueOf(file);
                } catch (IOException ex) {
                    JOptionPane.showMessageDialog(rootPane, "imagen: " + ex);
                }
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            }
        }
    }//GEN-LAST:event_JB_FotoActionPerformed

    //Agregar Foto
    private void JB_ProductoAgregarFotoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_ProductoAgregarFotoActionPerformed

        if (i >= 3) { //Si ya tengo cargada 3 imagenes
            JOptionPane.showMessageDialog(this, "No se puede elegir más de 3 imágenes");
        } else {
            DefaultTableModel model = (DefaultTableModel) JT_AddImagen.getModel();
            if (i == 0) {
                //Cargo mi byte[] con la imagen
                foto0 = obtenerBytes(archivo, longitudBytes);
                model.addRow(new Object[]{ruta}); //Agrego a Tabla Ruta de imagen
                JL_ProductoFoto.setIcon(null); //Vacío el Label
                i++;
                
            } else if (i == 1) {
                //Cargo mi byte[] con la imagen
                foto1 = obtenerBytes(archivo, longitudBytes);
                model.addRow(new Object[]{ruta});//Agrego a Tabla Ruta de imagen
                JL_ProductoFoto.setIcon(null);//Vacío el Label
                i++;
            } else if (i == 2) {
                //Cargo mi byte[] con la imagen
                foto2 = obtenerBytes(archivo, longitudBytes);
                model.addRow(new Object[]{ruta});//Agrego a Tabla Ruta de imagen
                JL_ProductoFoto.setIcon(null);//Vacío el Label
                i++;
            }
        }


    }//GEN-LAST:event_JB_ProductoAgregarFotoActionPerformed

//METODO iniciar ComboBox de Proveedor  
    private void iniciarComboBox() {
        try {
            for (int i = 0; i < ICPROVE.findProveedorEntities().size(); i++) {
                JCB_NuevoProductoProveedores.addItem(ICPROVE.findProveedorEntities().get(i).getNickname());
            }
        } catch (Exception e) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(this, e.getMessage());
        }

    }

//METODO iniciar ComboBox de Categoria
    private void iniciarComboBoxCategoria() {
        try {
            for (int i = 0; i < ICCATE.findCategoriaEntities().size(); i++) {
                //Si tiene productos me interesa mostrarlo
                if (ICCATE.findCategoriaEntities().get(i).getTieneProductos()) {
                    JCB_NuevoProductoSelCategoria.addItem(ICCATE.findCategoriaEntities().get(i).getNombre());

                }

            }
        } catch (Exception e) {
            getToolkit().beep();
            JOptionPane.showMessageDialog(this, e.getMessage());
        }

    }

    private void CrearModeloJT_Productocategoria() {
        try {
            Productocategoria = (new DefaultTableModel(
                    null, new String[]{"Categoria"}) {
                        Class[] types = new Class[]{
                            java.lang.String.class
                        };
                        boolean[] canEdit = new boolean[]{
                            false
                        };

                        @Override
                        public Class getColumnClass(int columnIndex) {
                            return types[columnIndex];
                        }

                        @Override
                        public boolean isCellEditable(int rowIndex, int colIndex) {
                            return canEdit[colIndex];
                        }
                    });
            JT_Productocategoria.setModel(Productocategoria);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.toString());
        }
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton JB_Foto;
    private javax.swing.JButton JB_ProductoAgregarFoto;
    private javax.swing.JButton JB_ProductoCancelar;
    private javax.swing.JButton JB_ProductoGuardar;
    private javax.swing.JButton JB_ProductoSalir;
    private javax.swing.JButton JB_Productocategoria;
    private javax.swing.JComboBox JCB_NuevoProductoProveedores;
    private javax.swing.JComboBox JCB_NuevoProductoSelCategoria;
    private javax.swing.JLabel JL_Imagen1;
    private javax.swing.JLabel JL_Imagen2;
    private javax.swing.JLabel JL_ProductoDescripcion;
    private javax.swing.JLabel JL_ProductoEspecifiaciones;
    private javax.swing.JLabel JL_ProductoFoto;
    private javax.swing.JLabel JL_ProductoNumReferencia;
    private javax.swing.JLabel JL_ProductoPesosUruguayos;
    private javax.swing.JLabel JL_ProductoPrecio;
    private javax.swing.JLabel JL_ProductoProveedor;
    private javax.swing.JLabel JL_ProductoTitulo;
    private javax.swing.JTextField JTF_ProductoDescripcion;
    private javax.swing.JTextField JTF_ProductoNumReferencia;
    private javax.swing.JTextField JTF_ProductoPrecio;
    private javax.swing.JTextField JTF_ProductoTitulo;
    private javax.swing.JTable JT_AddImagen;
    private javax.swing.JTable JT_Productocategoria;
    private java.awt.TextArea TA_NuevoProductoEspecifiaciones;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    // End of variables declaration//GEN-END:variables

    private static byte[] obtenerBytes(InputStream is, int capacidad) {
        DataInputStream dis = new DataInputStream(is);
        byte[] bytes = new byte[capacidad];//para la capacidad del array 
        try {
            dis.readFully(bytes);
            if (dis != null) {
                dis.close();
                
            }
        } catch (java.io.IOException ioe) {
            ioe.printStackTrace();
        }
        return bytes;
    }

}
